import { Provide, Inject, Get, Scope, ScopeEnum } from '@midwayjs/core';
import { WristbandAdvService } from '@service/firmware/wristband_adv.service';
import { RedisService } from '@midwayjs/redis';
import * as cron from 'node-cron';
@Provide()
@Scope(ScopeEnum.Singleton) // 关键修改
export class ClearOldDataTask {
  @Inject()
  wristbandAdvService: WristbandAdvService;
  @Inject()
  redisService: RedisService;

  private timer: NodeJS.Timer; // 建议保存timer引用
  private lastRunTime: Date;

  start() {
    // // 测试时：每10秒执行一次（方便观察）
    // cron.schedule('0 */1 * * * *', () => {  // ← 改成这个表达式
    //   this.exec().catch(console.error);
    // });
    // 每天 0 点执行（秒 分 时 日 月 星期）
    cron.schedule('0 0 0 * * *', () => {
      this.exec().catch(console.error);
    });
  }

  async exec() {
    this.lastRunTime = new Date();
    const lockKey = 'schedule:clearOldData';
    const locked = await this.redisService.set(lockKey, '1', 'EX', 60, 'NX');
    if (!locked) return;
    console.log('[Schedule] 开始清理旧数据...');
    try {
      await this.wristbandAdvService.deleteData();
      console.log('[Schedule] 数据清理完成');
    } catch (err) {
      console.error('[Schedule] 清理失败:', err);
    } finally {
      await this.redisService.del(lockKey);
    }
  }


  @Get('/schedule/status')
  async status() {
    return {
      running: !!this.timer,
      lastRun: this.lastRunTime
    };
  }
}

